package com.yfs.cloud.util;

import java.util.UUID;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import com.yfs.cloud.commons.Constants;

/**
* @Company: 影法師工作室
* @Description: 幂等token工具类  
* @author 影法師  
* @date 2020年8月24日 下午4:15:19 
* @version V1.0
 */
@Component
public class ApiIdempotentTokenUtil {

	@Autowired
	private RedisUtil redisUtil;

	/**幂等token的过期时间(单位是毫秒)*/
	@Value("${com.yfs.cloud.apiidempotent.expire}")
	private long expire;

	/**
	 * 
	* @Title: getToken 
	* @Description: 生成幂等token, 放进redis缓存 
	* @param @return    
	* @return String    
	* @throws
	 */
	public String getToken() {
		// 生成token必须符合两个要素 1、全局唯一 2、临时
		// 下面的代码依旧不是分布式情形下全局唯一解决方案
		String token = Constants.APIIDEMPOTENT_TOKEN + UUID.randomUUID();
		redisUtil.set(token, token, expire);
		return token;
	}

	/**
	 * 
	* @Title: findToken 
	* @Description: 从redis中查找token, 找到了就删, 没找到就返回没找到 
	* @param @param token
	* @param @return    
	* @return boolean    
	* @throws
	 */
	public boolean findToken(String token) {
		String value = (String) redisUtil.get(token);
		if (StringUtils.isEmpty(value)) {
			return false;
		}
		// 删除token, 保持幂等
		redisUtil.del(token);
		return true;
	}

}
